前面我們已經提到,websocket 的好用之處。在運用它龐大且超強的溝通能力之前,我們必須去建立後端server,來負責處理通訊過程。
在傳統網站上,有Apache、IIS等網頁伺服器在處理HTTP 請求。那我們必須去客製化一個server來處理websocket通訊。在各式各樣的語言之中,都已經有實現websocket server的library出來。而且大部分都是openSource的,算是一大福音!
在JavaScript的領域裡面有Socket.IO ,在Python裡面有pywebsocket,在Ruby有EventMachine。
我們在這邊實作的是Ruby語言去開發出來的EM-websocket。當然! 實作websocket是沒有程式語言限制的,如果你比較習慣前端javaScript可以去用node.js,或者是Python開發出來的pywebsocket等,選擇你最習慣的語言去達到事半功倍的效果。
在前面章節之中,如果你已經安裝完成Ruby的語言以及gem套件管理系統。
就可以輸入以下指令來幫助我們安裝em-websocket
gem install em-websocket
安裝完成之後,就來體會它的魅力試看看吧!
在開發作者的example之中,可以看到語法其實跟HTML前端websocket語法相似,甚至一樣。這樣我們寫起來也相當容易許多,至於用法都以前章節介紹的一樣。
require 'em-websocket'
EM.run {
EM::WebSocket.run(:host => "0.0.0.0", :port => 8080) do |ws|
ws.onopen { |handshake|
puts "WebSocket 開啟連接!"
ws.send "已經建立連線"
}
ws.onclose { puts "連線關閉" }
ws.onmessage { |message|
puts "從client收到的訊息: #{message}"
ws.send "回復client傳來訊息(echo) :#{msg}"
}
end
}
很簡單的用法,在EM::WebSocket 裡,0.0.0.0代表的是localhost端,至於port由8080進來。
如同前章節所介紹,在建立連線之後可以交換訊息。
上述範例為 回覆客戶端傳來的訊息。
當然,我們也可以加密連線wss:// 。
在Security的議題之中,百密總有一疏,因此要再額外自行去加強設計加密等才是比較安全的作法。
以下提供EM websocket的Github連結。
https://github.com/igrigorik/em-websocket
還有實現websocket前端以及後端echo範例的網站
http://www.websocket.org/echo.html